百度apollo自动驾驶planning代码学习

您所在的位置:网站首页 point heading 百度apollo自动驾驶planning代码学习

百度apollo自动驾驶planning代码学习

2023-04-07 14:13| 来源: 网络整理| 查看: 265

# 概述

http://common.cc/.h是planning模块下的common/util路径下 根据路径和命名也可以看出 http://common.cc其实就是实现了一些planning中会用到的一些通用的辅助工具,util这个文件夹在很多工程中都可以看到,都是存放一些辅助功能的实现代码。

从代码来看,http://common.cc主要是实现:

第一个函数

根据停止线的Frenet系的纵坐标s构建PathDecision路径决策类对象(停车决策),并设置相关的停车原因,停车点xyz坐标,停车处heading角等信息。

第二个函数(重载第一个函数)

根据障碍物所处的车道id以及在障碍物在车道中的Frenet系的纵坐标s构建PathDecision路径决策类对象(停车决策),并设置相关的停车原因,停车点xyz坐标,停车处heading角等信息。

主要就是实现针对停止线/车道中的障碍物设定路径决策对象。

common.h#pragma once #include #include #include "modules/planning/common/frame.h" #include "modules/planning/common/reference_line_info.h" namespace apollo { namespace planning { namespace util { //命名空间 apollo::planning::util:: /* * @brief:建立虚拟的障碍物或这虚拟墙,并且增加STOP停车决策 */ //参数stop_wall_id障碍物ID,是字符串类 //参数stop_line_s是Frenet坐标系下停止线的纵坐标s //参数安全距离stop_distance //参数stop_reason_code是StopReasonCode类型变量,停车原因代码 //参数wait_for_obstacles是一个string类型的vector,猜测其是一系列障碍物ID? //参数decision_tag是string类型,猜测就是决策的tag,也就是表明是停车/超车/减速避让等 //参数Frame类 frame Frame里面保存了一次规划周期的所有数据,后续的博客将会解析到 //参数ReferenceLineInfo类 reference_line_info ReferenceLineInfo类提供平滑的参考 //线,通常是道路中心线 int BuildStopDecision(const std::string& stop_wall_id, const double stop_line_s, const double stop_distance, const StopReasonCode& stop_reason_code, const std::vector& wait_for_obstacles, const std::string& decision_tag, Frame* const frame, ReferenceLineInfo* const reference_line_info); //函数重载,建立stop停车决策,参数几乎同上,唯一的不同是将参数stop_line_s停止线位置换 //成了lane_id车道Id和对应的车道的障碍物相对与车道的纵向位置lane_s int BuildStopDecision(const std::string& stop_wall_id, const std::string& lane_id, const double lane_s, const double stop_distance, const StopReasonCode& stop_reason_code, const std::vector& wait_for_obstacles, const std::string& decision_tag, Frame* const frame, ReferenceLineInfo* const reference_line_info); } // namespace util } // namespace planning } // namespace apollo http://common.cc#include "modules/planning/common/util/common.h" namespace apollo { namespace planning { namespace util { //用到apollo::common::util::命名空间下的另一个函数WithinBound,判断一个value是否在上下边界之间,返回true or false using apollo::common::util::WithinBound; /* * @brief:建立虚拟的障碍物或这虚拟墙,并且增加STOP停车决策 */ //参数stop_wall_id障碍物ID,是字符串类 //参数stop_line_s是Frenet坐标系下停止线的纵坐标s //参数安全距离stop_distance //参数stop_reason_code是StopReasonCode类型变量,停车原因代码 //参数wait_for_obstacles是一个string类型的vector,猜测其是一系列障碍物ID? //参数decision_tag是string类型,猜测就是决策的tag,也就是表明是停车/超车/减速避让等 //参数Frame类 frame Frame里面保存了一次规划周期的所有数据,后续的博客将会解析到 //参数ReferenceLineInfo类 reference_line_info ReferenceLineInfo类提供平滑的参考 //线,通常是道路中心线 int BuildStopDecision(const std::string& stop_wall_id, const double stop_line_s, const double stop_distance, const StopReasonCode& stop_reason_code, const std::vector& wait_for_obstacles, const std::string& decision_tag, Frame* const frame, ReferenceLineInfo* const reference_line_info) { CHECK_NOTNULL(frame);//判断frame不为NULL空,否则报错 CHECK_NOTNULL(reference_line_info);//判断reference_line_info不为NULL空,否则报错 // check //获取reference_line_info中的参考线数据放入reference_line const auto& reference_line = reference_line_info->reference_line(); //判断停止线的纵向位置s是否处于 区间[0 参考线总长度],否则报错 if (!WithinBound(0.0, reference_line.Length(), stop_line_s)) { AERROR AddLongitudinalDecision(decision_tag, stop_wall->Id(), stop); return 0; } } // namespace util } // namespace planning } // namespace apollo



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3